﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using StandardFeatures;

namespace _10._40._05_KontanthjaelpMain
{
    [Serializable]
    public class KO534
    {
        public Guid SagsId { get; private set; }

        public Kommune Kommunen { get; set; }
        public DateTime Henvendelsesdato { get; set; }
        public DateTime ModtagetDato { get; set; }
        public int SagsbehandlerId { get; set; }
        public PersonOplysninger PersonligeOplysninger { get; set; }

        public Årsag AnsøgningsÅrsag { get; set; }
        [Serializable]
        public class Årsag
        {
            public ÅrsagEnum AnsøgningsÅrsag { get; set; }
            public enum ÅrsagEnum
            {
                Arbejdsløshed_SelvSagtOp = 0
                ,
                Arbejdsløshed_Opsagt = 1
                    ,
                Arbejdsløshed_AfsluttetUddannelse = 2
                    ,
                Arbejdsløshed_OphørFraMidlertidigAnsættelse = 3
                    ,
                Arbejdsløshed_OrlovFraUddannelse = 4
                    ,
                Sygdom = 5
                    ,
                Barsel = 6
                    , Andet = 7
            }

            public DateTime FraDato { get; set; }
            public DateTime TilDato { get; set; }
            public bool Varighedsbegrænsning { get; set; }
            public DateTime ForventetFødsel { get; set; }
            public string Andet { get; set; }

            public Årsag()
            {
                FraDato = new DateTime();
                TilDato = new DateTime();
                ForventetFødsel = new DateTime();
            }
        }

        public Arbejdsløshedskasse AKasse { get; set; }
        [Serializable]
        public class Arbejdsløshedskasse
        {
            public string Navn { get; set; }
            public DateTime Indmeldelsesdato { get; set; }
            public DateTime Berettigelsesdato { get; set; }

            public Arbejdsløshedskasse()
            {
                Indmeldelsesdato = new DateTime();
                Berettigelsesdato = new DateTime();
            }
        }

        public Indtægt IndtægterAnsøger { get; set; }
        public Indtægt IndtægterSamlever { get; set; }
        [Serializable]
        public class Indtægt
        {
            public DateTime SidsteIndtægt { get; set; }
            public decimal Udbetaling { get; set; }

            public IndtægtskildeEnum Indtægtskilde { get; set; }
            public string IndtægtskildeAndet { get; set; }

            public enum IndtægtskildeEnum
            {
                Løn = 0
                , Kontanthjælp = 1
                , SU = 2
                , Dagpenge = 3
                , Andet = 4
            }

            public decimal FremtidigIndtægt { get; set; }
            public DateTime FremtidigIndtægtDato { get; set; }

            public Indtægt()
            {
                SidsteIndtægt = new DateTime();
                Indtægtskilde = new IndtægtskildeEnum();
                FremtidigIndtægtDato = new DateTime();
            }
        }

        public Formue FormueForhold { get; set; }
        [Serializable]
        public class Formue
        {
            public decimal Kontanter { get; set; }
            public decimal Pengeinstituter { get; set; }
            public decimal Pension { get; set; }
            public decimal Børneopsparing { get; set; }
            public decimal Værdipapirer { get; set; }

            public List<BoligEnum> Boliger { get; set; }
            public decimal BoligerVærdi { get; set; }
            public enum BoligEnum
            {
                Hus = 0
                , Lejlighed = 1
                , Sommerhus = 2
            }

            public decimal BoligerVærdiUdland { get; set; }

            public List<TransportEnum> Transportmidler { get; set; }
            public decimal TransportmidlerVærdi { get; set; }
            public enum TransportEnum
            {
                Bil = 0
                , Båd = 1
                , Motorcykel = 2
            }

            public Dictionary<string, decimal> AndetVærdi { get; set; }

            public bool BortgivetFormue { get; set; }

            public decimal getTotalFormue()
            {
                decimal totalFormue = 0;

                totalFormue = Kontanter + Pengeinstituter + Pension + Børneopsparing + Værdipapirer + BoligerVærdi + TransportmidlerVærdi;

                foreach (decimal værdi in AndetVærdi.Values)
                {
                    totalFormue = totalFormue + værdi;
                }

                return totalFormue;
            }

            public Formue()
            {
                Boliger = new List<BoligEnum>();
                Transportmidler = new List<TransportEnum>();
                AndetVærdi = new Dictionary<string, decimal>();
            }
        }

        public Boligforhold Bolig { get; set; }
        [Serializable]
        public class Boligforhold
        {
            public decimal Husleje { get; set; }
            public decimal Boligsikring { get; set; }
            public decimal Fremlejeindtægt { get; set; }
            public decimal Varme { get; set; }
            public decimal ElGas { get; set; }

            public string SærligUdgift { get; set; }
            public TimeSpan SærligUdgiftVarighed { get; set; }

            public Boligforhold()
            {
                SærligUdgiftVarighed = new TimeSpan();
            }
        }

        public KO534()
        {
            SagsId = Guid.NewGuid();
            Kommunen = new Kommune();
            Henvendelsesdato = new DateTime();
            ModtagetDato = new DateTime();
            PersonligeOplysninger = new PersonOplysninger();

            AnsøgningsÅrsag = new Årsag();

            AKasse = new Arbejdsløshedskasse();

            IndtægterAnsøger = new Indtægt();
            IndtægterSamlever = new Indtægt();

            FormueForhold = new Formue();

            Bolig = new Boligforhold();
        }
    }
}
